package main

import (
	"fmt"
	"math/rand"
	"strconv"
	"strings"
	"time"
)

func main() {
	// 打印九九乘法表。如果可以要求间隔均匀。
	for i := 1; i < 10; i++ { // 第2个乘数
		for j := 1; j < i+1; j++ { // 第1个乘数
			if j == i {
				if j == 3 && i == 3 {
					fmt.Print(" ", j, "*", i, "=", j*i, "\n")
				} else {
					fmt.Print(j, "*", i, "=", j*i, "\n")
				}
				//fmt.Print(j, "*", i, "=", j*i, "\n")
			} else {
				if j == 3 && i == 4 {
					fmt.Print(" ", j, "*", i, "=", j*i, " ")
				} else {
					fmt.Print(j, "*", i, "=", j*i, " ")
				}
				//fmt.Print(j, "*", i, "=", j*i, " ")
			}
		}
	}
	fmt.Println(strings.Repeat("-", 80))

	// 随机生成20以内的20个非0正整数，打印出来。对生成的数值，第单数个（不是索引）累加求和，第偶数个累乘求积。打印结果
	var (
		tmp     int
		sum     int
		EvenStr string
		OddStr  string
	)
	//var tmp int = 0
	//var sum int = 0
	var product int = 1
	src := rand.NewSource(time.Now().UnixNano())
	gen := rand.New(src)
	for i := 0; i < 20; i++ {
		for {
			tmp = gen.Intn(20)
			if tmp > 0 {
				break
			}
		}

		if i%2 == 0 {
			product *= tmp // 第偶数个求积
			EvenStr = EvenStr + ", " + strconv.Itoa(tmp)
		} else {
			sum += tmp // 第奇数个求和
			OddStr = OddStr + ", " + strconv.Itoa(tmp)
		}
	}
	fmt.Printf("第偶个数：%s\n", strings.TrimLeft(EvenStr, ", "))
	fmt.Printf("第奇个数：%s\n", strings.TrimLeft(OddStr, ", "))
	fmt.Println("product(Even):", product, ",", "sum(Odd):", sum)
	fmt.Println(strings.Repeat("-", 80))

	// 打印100以内的斐波那契数列
	// 0、1、1、2、3、5、8、13、21、34、……
	//在数学上，斐波那契数列以如下被以递推的方法定义：F(0)=0，F(1)=1，F(n)=F(n-1)+F(n-2)（n>=2，n∈N*）
	var first int = 0
	var second int = 1
	var temp int = 0
	fmt.Print(first, second, " ")

	for {
		temp = first + second
		if temp > 100 {
			break
		}
		fmt.Print(temp, " ")
		first = second
		second = temp
	}
	fmt.Println("")
	fmt.Println(strings.Repeat("-", 80))
}
